package org.soderiakelvy.controller.sujeto;

import java.io.Serializable;
import java.util.List;

import java.util.Map;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import javax.faces.context.FacesContext;

import org.soderiakelvy.controller.util.Constante;
import org.soderiakelvy.controller.util.SelectOneMany;
import org.soderiakelvy.model.domain.DesProdTipoCliVO;
import org.soderiakelvy.model.domain.TipoClienteVO;
import org.soderiakelvy.model.service.SujetoServicio;
import org.soderiakelvy.model.service.imp.SujetoServicioImpl;
import org.soderiakelvy.model.util.ConstantModel;

@ManagedBean
@ViewScoped
public class TipoClienteList implements Serializable{
	
	private static final long serialVersionUID = 1L;
	
	private List<TipoClienteVO> tiposDeClientes = SelectOneMany.tiposDeClientes();
	private List<DesProdTipoCliVO> productosConDescuentos;
	private SujetoServicio servicio = new SujetoServicioImpl();
	private TipoClienteVO tipoCliente = new TipoClienteVO();
	
	
	public TipoClienteList() {
		System.out.println("Constructor tipoClienteList");
	}
	
	public String nuevoTipoCliente(){
		return Constante.URL_TIPO_CLIENTE_NEW;
	}
	public void eliminarTipoCliente(){
		
		String result = servicio.deleteTipoCliente(tipoCliente);
		if(result.equals(ConstantModel.SUCCESS)){
			tiposDeClientes = SelectOneMany.tiposDeClientes();
		}else{
			if(result.equals(ConstantModel.DELETE_ASIGNADO)){
				FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN,"No se puede eliminar el Tipo de Cliente porque tiene Sujetos asignados", "sss"));
			}else {
				FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL,"Error al Insertar un registro", "Surgio un error al eliminar un registro. Comuicarse con el responsable del Sistema"));
			}
		}
	}
	
	public void bajaListener(TipoClienteVO tc){
		this.tipoCliente = tc;
		System.out.println("presiono baja  "+ tipoCliente.getNombre());
	}

	public String prepareEdit(TipoClienteVO tipoCliente) {
		FacesContext fc = FacesContext.getCurrentInstance();
		Map<String,Object> sessionParams = fc.getExternalContext().getSessionMap();
		sessionParams.put("tipoCliente", tipoCliente);
		return Constante.URL_TIPO_CLIENTE_EDIT;	
	}
	
	public String prepareDelete(TipoClienteVO tipoCliente) {
		FacesContext fc = FacesContext.getCurrentInstance();
		Map<String,Object> sessionParams = fc.getExternalContext().getSessionMap();
		sessionParams.put("tipoCliente", tipoCliente);
		return Constante.URL_TIPO_CLIENTE_DELETE;	
	}
	
	public void mostrarProductos(TipoClienteVO tp){
		this.tipoCliente = tp;
		productosConDescuentos = servicio.getProductosConDescuentoByTipoCliente(tipoCliente);
	}
	
	//--- GET AND SET 
	public List<TipoClienteVO> getTiposDeClientes() {
		return tiposDeClientes;
	}
	
	public TipoClienteVO getTipoCliente() {
		return tipoCliente;
	}

	public List<DesProdTipoCliVO> getProductosConDescuentos() {
		return productosConDescuentos;
	}
	
}
